#include "instructions/stores/istore.h"

namespace jvm {
namespace instructions {

void iStore(std::shared_ptr<rtda::Frame> frame, uint index) {
    int32_t val = frame->getOperandStack()->popInt();
    frame->getLocalVars().setInt(index, val);
}

void ISTORE::execute(std::shared_ptr<rtda::Frame> frame) {
    iStore(frame, _index);
}

void ISTORE_0::execute(std::shared_ptr<rtda::Frame> frame) {
    iStore(frame, 0);
}

void ISTORE_1::execute(std::shared_ptr<rtda::Frame> frame) {
    iStore(frame, 1);
}

void ISTORE_2::execute(std::shared_ptr<rtda::Frame> frame) {
    iStore(frame, 2);
}

void ISTORE_3::execute(std::shared_ptr<rtda::Frame> frame) {
    iStore(frame, 3);
}

} // namespace instructions
} // namespace jvm